"""
列表
"""
import random
from rich.console import Console
from rich.table import Table

import rich

# 通过[]关键字创建列表
items1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(items1)

# 通过list()函数创建列表
items2 = list(range(11, 21))
items3 = list('apple')
print(items2)
print(items3)

# 拼接列表
print(items1 + items2)
print(items1 + items3)

# 重复列表
print(items1 * 2)

# 判断列表中元素是否存在
print(10 in items1)
print(1 not in items1)
print('a' in items3)

# 通过索引访问列表元素
print(items1[0])  # 第一个元素
print(items1[-1])  # 倒数第一个元素
print(items1[-len(items1)])  # 倒数第N个元素
print(items1[0:len(items1):2])  # 切片访问数组：起始位置:结束位置:步长（结束位置元素无法访问到）
print(items1[-1::-2])
items2[2:4] = [14, 13]  # 通过切片访问修改列表
print(items2)

# 比较两个列表
print(items1 < items2)
print(items1 == items2)
print(items1 > items2)
print(items1 != items2)

# 遍历列表
for i in range(len(items1)):
    print(items1[i], end=' ')
print()
for i in items1:
    print(i, end=' ')

# 统计骰子数字出现次数
counters = [0] * 6
for i in range(1000):
    num = random.randrange(1, 7)
    counters[num - 1] += 1
for i in range(1, 7):
    print(f'{i}点出现了{counters[i - 1]}次')

# 列表的方法
# 添加和删除元素
languages = ['Python', 'Java', 'c++', 'go', 'rust']
print(languages)

languages.append('JavaScript')  # 在列表末尾追加一个元素
print(languages)

languages.insert(1, 'C#')  # 在列表索引1位置插入一个元素
print(languages)

languages.remove('JavaScript')  # 删除列表中第一个和参数相等的元素，如果没有对应的元素会报错
print(languages)

languages.pop()  # 移除并返回列表末尾元素
languages.pop(1)  # 移除并返回列表指定索引位置元素
del languages[1]  # 删除列表指定索引位置元素，但不返回
print(languages)

languages.clear()  # 清除列表所有元素
print(languages)

# 列表获取元素索引位置与出现频次
languages = ['Python', 'Java', 'c++', 'go', 'rust']
print(languages.index('c++'))
print(languages.count('rust'))
print(languages.index('c++', 2))  # 从索引位置2开始查找指定元素

# 列表排序与反转
languages = ['Python', 'Java', 'C++', 'Go', 'Rust']
languages.sort()
print(languages)
languages.reverse()
print(languages)

# 列表生成式
# 创建一个元素为100以内能被3或5整除的自然数列表
items = [i for i in range(1, 100) if i % 3 == 0 or i % 5 == 0]
print(items)
# 有整数列表num1，创建一个整数列表num2，其元素为num1中元素的平方
num1 = [1, 2, 3, 4, 5]
num2 = [i ** 2 for i in num1]
print(num2)
# 有整数列表num1，创建一个整数列表num2，其元素为num1中大于3的元素
num3 = [i for i in num1 if i > 3]
print(num3)

# 嵌套列表
scores = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(scores)
print(scores[0])
print(scores[0][0])
scores = [[random.randrange(1, 10) for _ in range(3)] for _ in range(5)]
print(scores)
print(scores[0])
print(scores[0][0])

# 列表的应用
# 双色球随机选号
red_balls = [i for i in range(1, 37)]
blue_balls = [i for i in range(1, 17)]
select_red_balls = random.sample(red_balls, 6)  # 无放回随机抽样
select_blue_ball = random.choice(blue_balls)  # 随机抽取一个元素
for ball in select_red_balls:
    print(f'\033[1:031:40m{ball:0>2d}\033[0m', end=' ')
print(f'\033[1:034:40m{select_blue_ball:0>2d}\033[0m')
# \033[031m: 设置文本颜色为红色。https://blog.csdn.net/u014470361/article/details/81512330
# {ball:0>2d}:
#     ball: 变量名，表示要格式化的数字。
#     0>2d: 格式说明符。
#         0: 用零填充不足长度的数字。
#         >: 右对齐。
#         2: 保留至少两位数。
#         d: 十进制整数。
# \033[0m: 重置文本颜色为默认颜色。
# end=' ': 打印后以空格分隔而不是换行。

# 利用rich美化输出
# 创建控制台

console = Console()

n = int(input('生成几注号码: '))
red_balls = [i for i in range(1, 34)]
blue_balls = [i for i in range(1, 17)]

# 创建表格并添加表头
table = Table(show_header=True)
for col_name in ('序号', '红球', '蓝球'):
    table.add_column(col_name, justify='center')

for i in range(n):
    selected_balls = random.sample(red_balls, 6)
    selected_balls.sort()
    blue_ball = random.choice(blue_balls)
    # 向表格中添加行（序号，红色球，蓝色球）
    table.add_row(
        str(i + 1),
        f'[red]{" ".join([f"{ball:0>2d}" for ball in selected_balls])}[/red]',
        f'[blue]{blue_ball:0>2d}[/blue]'
    )

# 通过控制台输出表格
console.print(table)
